package utils;
import java.security.SecureRandom;
//工具类，来生成长度大于8个字符，必须是大小写字母、数字和标点符号的组合的密码，用于管理员将密码重置
public class PasswordGenerator {
    // 定义小写字母、大写字母、数字和特殊字符的字符串
    private static final String CHAR_LOWER = "abcdefghijklmnopqrstuvwxyz";
    private static final String CHAR_UPPER = CHAR_LOWER.toUpperCase(); // 将小写字母转换为大写
    private static final String CHAR_DIGITS = "0123456789";
    private static final String CHAR_SPECIAL = "!@#$%^&*()_+-=[]{}|;':\",.<>/?"; // 定义特殊字符
    // 将所有可能的密码字符合并到一个字符串中
    private static final String PASSWORD_CHARS = CHAR_LOWER + CHAR_UPPER + CHAR_DIGITS + CHAR_SPECIAL;
    //生成随机密码
    public static String generateRandomPassword(int length) {
        if (length < 9) {
            throw new IllegalArgumentException("密码长度必须大于8。");
        }
        // 使用SecureRandom生成安全的随机数
        SecureRandom random = new SecureRandom();
        StringBuilder sb = new StringBuilder(length);
        // 确保密码中至少包含一个小写字母、一个大写字母、一个数字和一个特殊字符
        sb.append(CHAR_LOWER.charAt(random.nextInt(CHAR_LOWER.length())));
        sb.append(CHAR_UPPER.charAt(random.nextInt(CHAR_UPPER.length())));
        sb.append(CHAR_DIGITS.charAt(random.nextInt(CHAR_DIGITS.length())));
        sb.append(CHAR_SPECIAL.charAt(random.nextInt(CHAR_SPECIAL.length())));
        // 填充密码的其余部分
        while (sb.length() < length) {
            int index = random.nextInt(PASSWORD_CHARS.length());
            sb.append(PASSWORD_CHARS.charAt(index));
        }
        return sb.toString();
    }
}